Prof. Washington Santos da Silva
25/04/2023
Análise Exploratória de Dados (Exploratory Data Analysis (EDA))
– Wickham & Grolemund, Visualize
Import: importar/inserir seus dados no R.
Tidy: Armazenar seus dados em um formato consistente.
Transform: – criando novas variáveis a partir das já existentes e sumarizar informações.
Visualize: Representar visualmente seus dados.
Esta parte do livro mostra como usar a visualização e a transformação para explorar dados de maneira sistemática.
EDA é um ciclo iterativo no qual:
- Geramos perguntas sobre os dados.
- Procuramos por respostas visualizando, transformando e modelando os
dados.
- Usamos o que aprendemos para refinar as perguntas e/ou gerar novas
perguntas.
- A EDA não é um processo formal com um conjunto estrito de regras.
- Durante as fases iniciais da EDA, devemos nos sentir livres para
investigar quaisquer ideias que surjam.
- Algumas ideias irão gerar frutos, outras serão descartadas.
- Na medida em que a exploração continua, devemos nos focar em algumas
questões e áreas mais relevantes e produtivas.
A EDA é uma parte importante de qualquer análise de dados:
Variação é a tendência dos valores de uma variável aleatória de mudar o valor assumido de realização para realização.
Variáveis categóricas também são aleatórias e podem variar se “medirmos” seus diferentes níveis.
Cada variável aleatória tem seu próprio padrão de variação, que pode revelar informações importantes e interessantes.
A melhor maneira de entender um padrão é visualizar a distribuição dos valores da variável.
Dois tipos de perguntas sobre os dados sempre úteis para fazer descobertas:
Que tipo de variação ocorre dentro das variáveis?
Que tipo de covariação ocorre entre as variáveis?
O restante desta aula foca-se nestas duas perguntas.
Parte 1: Arquivos de dados:
Retornos da carteira:
## Rows: 3,529
## Columns: 3
## $ VALE <dbl> NA, 0.0172102476, 0.0824816167, -0.0221424526, -0.0582752221,…
## $ WEGE3.SA <dbl> NA, 0.028168914, 0.004931529, -0.018538688, -0.002777568, -0.…
## $ PETR4.SA <dbl> NA, -0.001435125, 0.048850959, -0.016438432, -0.038718922, -0…
Estrutura do objeto:
## [1] "tbl_df" "tbl" "data.frame"
Amostra de dados do projeto Gestão de Risco nos Institutos Federais:
## Rows: 21
## Columns: 8
## $ q1_1 <chr> "41-50 anos", "41-50 anos", "31-40 anos", "31-40 anos", "31-40 an…
## $ q1_2 <chr> "Feminino", "Masculino", "Masculino", "Feminino", "Masculino", "F…
## $ q1_3 <chr> "Técnico Administrativo", "Técnico Administrativo", "Técnico Admi…
## $ q1_4 <chr> "Diretoria Executiva de Desenvolvimento Insttucional", "Coordenad…
## $ q1_5 <chr> "Mestrado", "Mestrado", "Mestrado", "Especialização", "Mestrado",…
## $ q1_6 <chr> "11-15 anos", "6-10 anos", "6-10 anos", "6-10 anos", "6-10 anos",…
## $ q1_7 <chr> "Até 5 anos", "6-10 anos", "Até 5 anos", "6-10 anos", "6-10 anos"…
## $ q1_8 <chr> "Sim", "Não", "Sim", "Sim", "Sim", NA, "Sim", "Sim", "Não", "Sim"…
Estrutura do objeto:
## [1] "tbl_df" "tbl" "data.frame"
Parte 2: Estatísticas Descritivas em R
summary()Retornos da carteira:
## VALE WEGE3.SA PETR4.SA
## Min. :-0.23803 Min. :-0.20620 Min. :-0.29698
## 1st Qu.:-0.01634 1st Qu.:-0.01031 1st Qu.:-0.01438
## Median : 0.00044 Median : 0.00045 Median : 0.00000
## Mean : 0.00062 Mean : 0.00108 Mean : 0.00058
## 3rd Qu.: 0.01650 3rd Qu.: 0.01206 3rd Qu.: 0.01454
## Max. : 0.28441 Max. : 0.13894 Max. : 0.22222
## NA's :84 NA's :135 NA's :135
Gestão de Risco - Questionário:
## q1_1 q1_2 q1_3 q1_4
## Length:21 Length:21 Length:21 Length:21
## Class :character Class :character Class :character Class :character
## Mode :character Mode :character Mode :character Mode :character
## q1_5 q1_6 q1_7 q1_8
## Length:21 Length:21 Length:21 Length:21
## Class :character Class :character Class :character Class :character
## Mode :character Mode :character Mode :character Mode :character
skimr::skim()Retornos da carteira:
| Name | carteira |
| Number of rows | 3529 |
| Number of columns | 3 |
| _______________________ | |
| Column type frequency: | |
| numeric | 3 |
| ________________________ | |
| Group variables | None |
Variable type: numeric
| skim_variable | n_missing | complete_rate | mean | sd | p0 | p25 | p50 | p75 | p100 | hist |
|---|---|---|---|---|---|---|---|---|---|---|
| VALE | 84 | 0.98 | 0 | 0.03 | -0.24 | -0.02 | 0 | 0.02 | 0.28 | ▁▁▇▁▁ |
| WEGE3.SA | 135 | 0.96 | 0 | 0.02 | -0.21 | -0.01 | 0 | 0.01 | 0.14 | ▁▁▇▇▁ |
| PETR4.SA | 135 | 0.96 | 0 | 0.03 | -0.30 | -0.01 | 0 | 0.01 | 0.22 | ▁▁▇▂▁ |
Gestão de Risco - Questionário:
| Name | risco |
| Number of rows | 21 |
| Number of columns | 8 |
| _______________________ | |
| Column type frequency: | |
| character | 8 |
| ________________________ | |
| Group variables | None |
Variable type: character
| skim_variable | n_missing | complete_rate | min | max | empty | n_unique | whitespace |
|---|---|---|---|---|---|---|---|
| q1_1 | 0 | 1.00 | 10 | 10 | 0 | 3 | 0 |
| q1_2 | 0 | 1.00 | 8 | 9 | 0 | 2 | 0 |
| q1_3 | 0 | 1.00 | 7 | 22 | 0 | 2 | 0 |
| q1_4 | 2 | 0.90 | 7 | 87 | 0 | 18 | 0 |
| q1_5 | 0 | 1.00 | 8 | 14 | 0 | 2 | 0 |
| q1_6 | 0 | 1.00 | 9 | 15 | 0 | 4 | 0 |
| q1_7 | 0 | 1.00 | 9 | 15 | 0 | 4 | 0 |
| q1_8 | 1 | 0.95 | 3 | 3 | 0 | 2 | 0 |
Parte 3: Preparando os dados para análise
## VALE WEGE3.SA PETR4.SA
## Min. :-0.2380303 Min. :-0.2061975 Min. :-0.2969777
## 1st Qu.:-0.0161553 1st Qu.:-0.0102900 1st Qu.:-0.0145569
## Median : 0.0003861 Median : 0.0005578 Median : 0.0000000
## Mean : 0.0007789 Mean : 0.0011484 Mean : 0.0006453
## 3rd Qu.: 0.0166091 3rd Qu.: 0.0122094 3rd Qu.: 0.0147556
## Max. : 0.2844115 Max. : 0.1389445 Max. : 0.2222221
Criando uma estrutura de dados longer
carteira_analise_longer <- carteira_analise %>%
tidyr::pivot_longer(cols = c('VALE', 'WEGE3.SA', 'PETR4.SA'),
names_to = "acoes",
values_to = "retornos")
head(carteira_analise_longer)## # A tibble: 6 × 2
## acoes retornos
## <chr> <dbl>
## 1 VALE 0.0172
## 2 WEGE3.SA 0.0282
## 3 PETR4.SA -0.00144
## 4 VALE 0.0825
## 5 WEGE3.SA 0.00493
## 6 PETR4.SA 0.0489
risco_analise <- risco %>%
transmute(
q1_1 = factor(
q1_1,
levels = c(
"20-30 anos",
"31-40 anos",
"41-50 anos",
"51-60 anos",
"Mais de 60 anos"
),
ordered = TRUE
),
q1_2 = factor(q1_2),
q1_3 = factor(q1_3),
q1_4 = factor(q1_4),
q1_5 = factor(
q1_5,
levels = c(
"Ensino fundamental",
"Ensino médio",
"Ensino superior",
"Especialização",
"Mestrado",
"Doutorado"
),
ordered = TRUE
),
q1_6 = factor(
q1_6,
levels = c(
"Até 5 anos",
"6-10 anos",
"11-15 anos",
"16-20 anos",
"Mais de 20 anos"
),
ordered = TRUE
),
q1_7 = factor(
q1_7,
levels = c(
"Até 5 anos",
"6-10 anos",
"11-15 anos",
"16-20 anos",
"Mais de 20 anos"
),
ordered = TRUE
),
q1_8 = factor(q1_8)
)Verificando o novo objeto `risco_analise``:
| Name | risco_analise |
| Number of rows | 21 |
| Number of columns | 8 |
| _______________________ | |
| Column type frequency: | |
| factor | 8 |
| ________________________ | |
| Group variables | None |
Variable type: factor
| skim_variable | n_missing | complete_rate | ordered | n_unique | top_counts |
|---|---|---|---|---|---|
| q1_1 | 0 | 1.00 | TRUE | 3 | 31-: 12, 41-: 7, 51-: 2, 20-: 0 |
| q1_2 | 0 | 1.00 | FALSE | 2 | Mas: 12, Fem: 9 |
| q1_3 | 0 | 1.00 | FALSE | 2 | Téc: 20, Doc: 1 |
| q1_4 | 2 | 0.90 | FALSE | 18 | Dir: 2, Adm: 1, Adm: 1, Ass: 1 |
| q1_5 | 0 | 1.00 | TRUE | 2 | Mes: 14, Esp: 7, Ens: 0, Ens: 0 |
| q1_6 | 0 | 1.00 | TRUE | 4 | 6-1: 9, 11-: 9, 16-: 2, Mai: 1 |
| q1_7 | 0 | 1.00 | TRUE | 4 | Até: 13, 6-1: 6, 11-: 1, Mai: 1 |
| q1_8 | 1 | 0.95 | FALSE | 2 | Sim: 17, Não: 3 |
Parte 4: Estatísticas Descritivas
## VALE WEGE3.SA PETR4.SA
## nobs 3311.000000 3311.000000 3311.000000
## NAs 0.000000 0.000000 0.000000
## Minimum -0.238030 -0.206198 -0.296978
## Maximum 0.284411 0.138944 0.222222
## 1. Quartile -0.016155 -0.010290 -0.014557
## 3. Quartile 0.016609 0.012209 0.014756
## Mean 0.000779 0.001148 0.000645
## Median 0.000386 0.000558 0.000000
## Sum 2.578996 3.802362 2.136589
## SE Mean 0.000564 0.000375 0.000520
## LCL Mean -0.000327 0.000413 -0.000374
## UCL Mean 0.001885 0.001884 0.001664
## Variance 0.001054 0.000465 0.000894
## Stdev 0.032468 0.021574 0.029902
## Skewness 0.283139 -0.317256 -0.266338
## Kurtosis 6.665432 6.956479 8.008591
## q1_1 q1_2 q1_3
## 20-30 anos : 0 Feminino : 9 Docente : 1
## 31-40 anos :12 Masculino:12 Técnico Administrativo:20
## 41-50 anos : 7
## 51-60 anos : 2
## Mais de 60 anos: 0
##
##
## q1_4
## Diretora de Desenvolvimento Institucional : 2
## Administrador : 1
## Administrador, Diretor de Desenvolvimento Institucional : 1
## Assistente em Administração | Ouvidora | Presidente da Unidade de Gestão da Integridade: 1
## auditor : 1
## (Other) :13
## NA's : 2
## q1_5 q1_6 q1_7 q1_8
## Ensino fundamental: 0 Até 5 anos :0 Até 5 anos :13 Não : 3
## Ensino médio : 0 6-10 anos :9 6-10 anos : 6 Sim :17
## Ensino superior : 0 11-15 anos :9 11-15 anos : 1 NA's: 1
## Especialização : 7 16-20 anos :2 16-20 anos : 0
## Mestrado :14 Mais de 20 anos:1 Mais de 20 anos: 1
## Doutorado : 0
##
## item ano pe ve
## Min. : 1 2018:1601 eletrico :1140 Min. : 0.0
## 1st Qu.:1398 2019:1591 Bens imoveis:1093 1st Qu.: 8.9
## Median :2796 2020:2398 expediente : 543 Median : 28.3
## Mean :2796 laboratorial: 535 Mean : 1340.3
## 3rd Qu.:4193 medicao : 451 3rd Qu.: 105.2
## Max. :5591 Esportivo : 413 Max. :428390.0
## (Other) :1415
## vh percent x3c x2c
## Min. : 0.0 Min. :-1.0000 Min. :0.0000 Min. :0.00000
## 1st Qu.: 0.6 1st Qu.:-0.7500 1st Qu.:1.0000 1st Qu.:0.00000
## Median : 9.6 Median :-0.3750 Median :1.0000 Median :0.00000
## Mean : 701.5 Mean :-0.4262 Mean :0.9562 Mean :0.04526
## 3rd Qu.: 41.1 3rd Qu.:-0.0600 3rd Qu.:1.0000 3rd Qu.:0.00000
## Max. :378000.0 Max. :16.0700 Max. :1.0000 Max. :1.00000
##
## it cb fn pa
## Min. :0.0000 Min. :0.0000 Min. :0.000 Min. :0.00000
## 1st Qu.:0.0000 1st Qu.:0.0000 1st Qu.:0.000 1st Qu.:0.00000
## Median :1.0000 Median :0.0000 Median :0.000 Median :0.00000
## Mean :0.5379 Mean :0.1546 Mean :0.237 Mean :0.05564
## 3rd Qu.:1.0000 3rd Qu.:0.0000 3rd Qu.:0.000 3rd Qu.:0.00000
## Max. :1.0000 Max. :1.0000 Max. :1.000 Max. :1.00000
##
## cc ds pt inst
## Min. :0.0000 Min. :0.00000 Min. : 0.000 Min. :0.000
## 1st Qu.:0.0000 1st Qu.:0.00000 1st Qu.: 2.000 1st Qu.:0.000
## Median :0.0000 Median :0.00000 Median : 4.000 Median :0.000
## Mean :0.1474 Mean :0.06547 Mean : 4.687 Mean :0.471
## 3rd Qu.:0.0000 3rd Qu.:0.00000 3rd Qu.: 6.000 3rd Qu.:1.000
## Max. :1.0000 Max. :1.00000 Max. :30.000 Max. :1.000
##
## re lc
## Min. :0.0000 Min. :0.0000
## 1st Qu.:0.0000 1st Qu.:0.0000
## Median :0.0000 Median :0.0000
## Mean :0.2612 Mean :0.2669
## 3rd Qu.:1.0000 3rd Qu.:1.0000
## Max. :1.0000 Max. :1.0000
##
Funções R:
media amostral
## [1] 0.0005773374
mediana amostral
## [1] 0
minimo, quartis e maximo amostrais
## 0% 25% 50% 75% 100%
## -0.29697774 -0.01438195 0.00000000 0.01453912 0.22222214
percentis especificos: \(p_{32}\), \(p_{57}\) e \(p_{98}\)
## 32% 57% 98%
## -0.009350287 0.003712789 0.067080166
minimo entre os elementos de um vetor
## [1] -0.2969777
máximo dos elementos do vetor
## [1] 0.2222221
variância amostral
## [1] 0.0008882345
desvio-padrão amostral
## [1] 0.02980326
desvio-absoluto mediano amostral
## [1] 0.02150178
intervalo interquartil amostral
## [1] 0.02892107
Tabelas de Frequência: Função tabyl() do pacote
janitor
## q1_1 n percent
## 20-30 anos 0 0.0000000
## 31-40 anos 12 0.5714286
## 41-50 anos 7 0.3333333
## 51-60 anos 2 0.0952381
## Mais de 60 anos 0 0.0000000
## q1_2 n percent
## Feminino 9 0.4285714
## Masculino 12 0.5714286
## q1_3 n percent
## Docente 1 0.04761905
## Técnico Administrativo 20 0.95238095
Customizando as tabelas:
tab4 <- risco_analise |> tabyl(q1_1) |>
adorn_totals(c("row")) |>
adorn_pct_formatting(rounding = "half up", digits = 0) |>
knitr::kable()
tab4| q1_1 | n | percent |
|---|---|---|
| 20-30 anos | 0 | 0% |
| 31-40 anos | 12 | 57% |
| 41-50 anos | 7 | 33% |
| 51-60 anos | 2 | 10% |
| Mais de 60 anos | 0 | 0% |
| Total | 21 | 100% |
tab5 <- risco_analise |> tabyl(q1_2) |>
adorn_totals(c("row")) |>
adorn_pct_formatting(rounding = "half up", digits = 0) |>
knitr::kable()
tab5| q1_2 | n | percent |
|---|---|---|
| Feminino | 9 | 43% |
| Masculino | 12 | 57% |
| Total | 21 | 100% |
tab5 <- risco_analise |> tabyl(q1_3) |>
adorn_totals(c("row")) |>
adorn_pct_formatting(rounding = "half up", digits = 0) |>
knitr::kable()
tab5| q1_3 | n | percent |
|---|---|---|
| Docente | 1 | 5% |
| Técnico Administrativo | 20 | 95% |
| Total | 21 | 100% |
Tabulação cruzada:
## q1_2 Docente Técnico Administrativo
## Feminino 0 9
## Masculino 1 11
Customizando a tabela:
tab7 <- risco_analise |> tabyl(q1_2, q1_3) |>
adorn_percentages("row") |>
adorn_pct_formatting(digits = 2) |>
adorn_ns() |>
knitr::kable()
tab7| q1_2 | Docente | Técnico Administrativo |
|---|---|---|
| Feminino | 0.00% (0) | 100.00% (9) |
| Masculino | 8.33% (1) | 91.67% (11) |
## $Docente
## q1_1 Feminino Masculino
## 20-30 anos 0 0
## 31-40 anos 0 0
## 41-50 anos 0 1
## 51-60 anos 0 0
## Mais de 60 anos 0 0
##
## $`Técnico Administrativo`
## q1_1 Feminino Masculino
## 20-30 anos 0 0
## 31-40 anos 5 7
## 41-50 anos 2 4
## 51-60 anos 2 0
## Mais de 60 anos 0 0
Tabelas para Publicação Usando os pacotes
gtsummary e flextable
Tabela: Variáveis Categóricas
# Pacote utilizado
library(gtsummary)
library(flextable)
tabgt01 <-cotacoes %>%
select(-c(item, ve, vh, percent, pt)) %>%
tbl_summary(
by = ano,
statistic = list(
all_categorical() ~ "{n} ({p}%)"
),
label = list(pe ~ "Grupo Licitado",
it ~ "Pesquisa de Preços (internet)",
cb ~ "Pesquisa de Preços (combinada)",
fn ~ "Pesquisa de Preços (fornecedores)",
pa ~ "Pesquisa de Preços (painel)"
),
digits = all_continuous() ~ 2
) %>%
modify_header(label ~ "**Variável**") %>%
modify_caption("TABELA 1. Estatísticas Descritivas: Variáveis Categóricas.") %>%
modify_footnote(all_stat_cols() ~ " N = total de observações do ano. n = (total de observações da variável categórica/nível) (%) = porcentagem do total de observações do ano")
tabgt01| Variável | 2018, N = 1,6011 | 2019, N = 1,5911 | 2020, N = 2,3981 |
|---|---|---|---|
| Grupo Licitado | |||
| Bens imoveis | 486 (30%) | 229 (14%) | 378 (16%) |
| eletrico | 305 (19%) | 584 (37%) | 251 (10%) |
| Esportivo | 123 (7.7%) | 31 (1.9%) | 259 (11%) |
| expediente | 0 (0%) | 0 (0%) | 543 (23%) |
| ferramentas | 126 (7.9%) | 51 (3.2%) | 110 (4.6%) |
| laboratorial | 0 (0%) | 332 (21%) | 203 (8.5%) |
| limpeza | 9 (0.6%) | 110 (6.9%) | 269 (11%) |
| medicao | 106 (6.6%) | 103 (6.5%) | 242 (10%) |
| quimico | 252 (16%) | 76 (4.8%) | 0 (0%) |
| veterinario | 194 (12%) | 75 (4.7%) | 143 (6.0%) |
| x3c | 1,529 (96%) | 1,502 (94%) | 2,314 (96%) |
| x2c | 43 (2.7%) | 152 (9.6%) | 58 (2.4%) |
| Pesquisa de Preços (internet) | 777 (49%) | 524 (33%) | 1,706 (71%) |
| Pesquisa de Preços (combinada) | 283 (18%) | 353 (22%) | 228 (9.5%) |
| Pesquisa de Preços (fornecedores) | 484 (30%) | 425 (27%) | 416 (17%) |
| Pesquisa de Preços (painel) | 36 (2.2%) | 226 (14%) | 49 (2.0%) |
| cc | 236 (15%) | 215 (14%) | 373 (16%) |
| ds | 95 (5.9%) | 116 (7.3%) | 155 (6.5%) |
| inst | 553 (35%) | 298 (19%) | 1,782 (74%) |
| re | 705 (44%) | 677 (43%) | 78 (3.3%) |
| lc | 338 (21%) | 616 (39%) | 538 (22%) |
| 1 N = total de observações do ano. n = (total de observações da variável categórica/nível) (%) = porcentagem do total de observações do ano | |||
Tabela: Variáveis Numéricas
tabgt02 <- cotacoes %>% select(c(ano, ve, vh, percent, pt)) %>%
tbl_summary(
by = ano,
statistic = list(
all_continuous() ~ c("({median}, {mean}) ({p25}, {p75}), ({min}, {max}) ({IQR}, {sd})")
),
label = list(
ve ~ "Valor Estimado",
vh ~ "Valor Homologado",
percent ~ "Variação (%)",
pt ~ "Total de Fornecedores Participantes"),
digits = all_continuous() ~ 2
) %>%
modify_header(label ~ "**Variável**") %>%
modify_caption("TABELA 2. Estatísticas Descritivas: Variáveis Numéricas.") %>%
modify_footnote(all_stat_cols() ~ "(média, mediana) (p25, p75) (mín., máx.) (IIQ, desvio_padrão)"
)
tabgt02| Variável | 2018, N = 1,6011 | 2019, N = 1,5911 | 2020, N = 2,3981 |
|---|---|---|---|
| Valor Estimado | (31.35, 312.32) (11.26, 96.89), (0.05, 51,293.50) (85.63, 2,147.00) | (24.88, 498.69) (7.48, 89.29), (0.04, 68,000.00) (81.81, 3,591.55) | (28.85, 2,584.92) (8.34, 128.91), (0.02, 428,390.00) (120.57, 23,643.17) |
| Valor Homologado | (13.90, 171.85) (0.70, 48.42), (0.00, 48,900.00) (47.72, 1,599.76) | (9.39, 234.05) (0.77, 39.89), (0.00, 45,444.88) (39.12, 2,074.35) | (7.73, 1,365.22) (0.49, 37.98), (0.00, 378,000.00) (37.48, 16,990.37) |
| Variação (%) | (-0.28, -0.36) (-0.70, 0.00), (-1.00, 16.07) (0.70, 0.68) | (-0.32, -0.40) (-0.70, 0.00), (-1.00, 0.17) (0.70, 0.38) | (-0.45, -0.49) (-0.80, -0.20), (-1.00, 4.07) (0.60, 0.36) |
| Total de Fornecedores Participantes | (4.00, 4.19) (2.00, 6.00), (0.00, 15.00) (4.00, 2.62) | (4.00, 4.61) (2.00, 7.00), (0.00, 30.00) (5.00, 3.08) | (5.00, 5.07) (3.00, 7.00), (0.00, 17.00) (4.00, 3.27) |
| 1 (média, mediana) (p25, p75) (mín., máx.) (IIQ, desvio_padrão) | |||
Características observáveis na distribuição de variáveis numéricas
Simetria/Assimetria: A distribuição é simétrica: assimétrica a esquerda ou a direita?.
Outliers: Há um ou mais valores muito distantes da maioria dos dados?
Multimodalidade: A distribuição possui dois ou mais picos/clusters?
Gaps: Há intervalos de valores que não contém dados?
Erros: Há valores fora do intervalo factível?
Por que visualizar a distribuição dos dados?
Customizando um Histograma
h1c <- ggplot(carteira, aes(x = VALE)) +
geom_histogram() +
labs(x = "Retornos",
y = "Frequência",
title = "Vale: Retornos das Ações") +
xlim(-0.3, 0.3) +
theme_minimal()
h1cHistograma
Customizando:
h2c <- ggplot(carteira, aes(x = PETR4.SA)) +
geom_histogram() +
labs(x = "Retornos",
y = "Frequência",
title = "Petrobrás: Retornos das Ações") +
xlim(-0.3, 0.3) +
theme_minimal()
h2cCustomizando
h3c <- ggplot(carteira, aes(x = WEGE3.SA)) +
geom_histogram() +
labs(x = "Retornos",
y = "Frequência",
title = "WEG: Retornos das Ações") +
xlim(-0.3, 0.3) +
theme_minimal()
h3cDensidade Empírica
Customizando
d1c <- ggplot(carteira, aes(x = VALE)) +
geom_density() +
labs(x = "Retornos",
y = "Densidade",
title = "Vale: Retornos das Ações") +
xlim(-0.3, 0.3) +
theme_minimal()
d1cDensidade Empírica
Customizando
d2c <- ggplot(carteira, aes(x = PETR4.SA)) +
geom_density() +
labs(x = "Retornos",
y = "Densidade",
title = "Petrobrás: Retornos das Ações") +
xlim(-0.3, 0.3) +
theme_minimal()
d2cDensidade Empírica
Customizando
d3c <- ggplot(carteira, aes(x = WEGE3.SA)) +
geom_density() +
labs(x = "Retornos",
y = "Densidade",
title = "WEG: Retornos das Ações") +
xlim(-0.3, 0.3) +
theme_minimal()
d3cDensidade Empírica: Múltiplos gráficos em um painel
Densidade Empírica: Múltiplos gráficos em um painel
Histograma com Densidade Empírica
h1_d <- ggplot(carteira, aes(x = VALE)) +
geom_histogram(aes(y = ..density..)) +
geom_density(col = "blue", size = 1.5) +
theme_minimal()
h1_dBoxplot
Boxplot: coord_flip() inverte a orientação
Customizando
b1c <- ggplot(carteira, aes(x = VALE)) +
geom_boxplot() +
labs(x = "Retornos",
y = NULL,
title = "Vale: Retornos das Ações") +
xlim(-0.3, 0.3) +
theme_minimal()
b1cBoxplot
Customizando
b2c <- ggplot(carteira, aes(x = PETR4.SA)) +
geom_boxplot() +
labs(x = "Retornos",
y = NULL,
title = "Petrobrás: Retornos das Ações") +
xlim(-0.3, 0.3) +
theme_minimal()
b2cBoxplot
Customizando
b3c <- ggplot(carteira, aes(x = WEGE3.SA)) +
geom_boxplot() +
labs(x = "Retornos",
y = NULL,
title = "WEG: Retornos das Ações") +
xlim(-0.3, 0.3) +
theme_minimal()
b3cBoxplot: Múltiplos gráficos em um painel
Continuando com a usar o sistema de visualização do pacote
ggplot2
ggplot(risco_analise, aes(x = q1_1)) +
geom_bar() +
labs(title="Gráfico de Barra Simples",
x="Idade",
y="Frequência (n)") Invertendo os eixos usando coord_flip():
ggplot(risco_analise, aes(x = q1_1)) +
geom_bar() +
labs(x="Idade",
y="Frequência (n)") +
coord_flip() +
theme_minimal()reordenando os níveis do fator idade:
ggplot(risco_analise, aes(x = fct_rev(q1_1))) +
geom_bar() +
labs(x="Idade",
y="Frequência (n)") +
coord_flip() +
theme_minimal()Diferenciando as categorias com cores:
ggplot(risco_analise, aes(x = fct_rev(q1_1), fill = q1_1)) +
geom_bar() +
labs(x= "Idade",
y = "Frequência (n)") +
coord_flip() +
theme_minimal()Anotando as barras: porcentagens
risco_anot <- risco_analise |>
group_by(q1_1) |>
summarize(n = n()) |>
mutate(
pct = n / sum(n),
lbls = scales::percent(pct)
)
ggplot(risco_anot, aes(x = q1_1, y = pct, fill = q1_1)) +
geom_bar(stat = "identity", fill = "steelblue") +
geom_text(aes(label = lbls),
vjust = -0.5,
size = 3) +
labs(x = "Idade",
y = "Frequência (n)") +
theme_minimal()Anotando as barras: totais
risco_anot2 <- risco_analise |>
group_by(q1_1) |>
summarize(n = n()) |>
mutate(
total = n,
lbls = scales::number(total)
)
ggplot(risco_anot2, aes(x = q1_1, y = total, fill = q1_1)) +
geom_bar(stat = "identity", fill = "steelblue") +
geom_text(aes(label = lbls),
vjust = -0.5,
size = 3) +
labs(x = "Idade",
y = "Frequência (n)") +
theme_minimal()Gráficos de Dispersão:
Covariação: Dispersão e \(r_{xy}\)
verbete na wikipedia
Covariação: Quarteto de Ascombe
Covariação: Gráfico de Dispersão
Covariação: Gráfico de Dispersão
Covariação: Gráfico de Dispersão
ggplot(data = carteira) +
geom_point(mapping = aes(x = VALE, y = PETR4.SA)) +
geom_smooth(mapping = aes(x = VALE, y = PETR4.SA), method = "lm", se = FALSE)Covariação: Gráfico de Dispersão
Covariação: Gráfico de Dispersão
Covariação: Gráfico de Dispersão
ggplot(data = carteira) +
geom_point(mapping = aes(x = WEGE3.SA, y = PETR4.SA)) +
geom_smooth(mapping = aes(x = WEGE3.SA, y = PETR4.SA), method = "lm", se = FALSE)Covariação: Gráfico de Dispersão
Covariação: Gráfico de Dispersão
Covariação: Gráfico de Dispersão
ggplot(data = carteira) +
geom_point(mapping = aes(x = WEGE3.SA, y = VALE)) +
geom_smooth(mapping = aes(x = WEGE3.SA, y = VALE), method = "lm", se = FALSE)Tudo ao Mesmo Tempo
Características observáveis em gráficos de séries temporais:
Tendência: É o crescimento ou decrescimento de longo prazo observado nos dados.
Sazonalidade: Um padrão sazonal ocorre quando uma série temporal é afetada por fatores sazonais, como a época do ano ou o dia da semana.
Ciclos: Um ciclo ocorre se observamos crescimentos e decrescimento nos dados não apresentam um período fixo.
Sistema Gerenciador de Séries do Banco Central do Brasil
Todo pesquisador de finanças e economia deve conhecer o Sistema Gerenciador de Séries Temporais do Banco Central do Brasil.
Pacotes R que se comunicam com a API do Banco
Central:
library(GetBCBData)
library(ggplot2)
# define ids
id.series <- c(utilizacao_capacidade_instalada = 1344)
first.date = '2010-01-01'
# obtem serie do bcb
df_uci <- gbcbd_get_series(id = id.series,
first.date = first.date,
last.date = Sys.Date(),
use.memoise = FALSE)
# grafico de linha via ggplot2
ggplot(data = df_uci, aes(x = ref.date, y = value)) +
geom_line(color = "blue") +
labs(x = 'Trimestre', y = 'Utilização da Capacidade Instalada (%)',
title = 'Utilização da capacidade instalada - Geral (FGV)',
subtitle = "Periodicidade: Trimestral",
caption = "Fonte: Elaborado pelo Autor com dados da FGV") Gráfico de Linha para Séries Temporais